import type { UserQuery, UserVO } from "@/api/system/user/types";
import type { AxiosPromise } from "axios";
import type { RoleDeptTree, RoleQuery, RoleVO } from "./types";
import request from "@/utils/request";

export const listRole = (query: RoleQuery): AxiosPromise<RoleVO[]> => {
  return request({
    url: "/system/role/list",
    method: "get",
    params: query
  });
};

/**
 * 查询角色详细
 */
export const getRole = (roleId: string | number): AxiosPromise<RoleVO> => {
  return request({
    url: "/system/role/" + roleId,
    method: "get"
  });
};

/**
 * 新增角色
 */
export const addRole = (data: any) => {
  return request({
    url: "/system/role",
    method: "post",
    data: data
  });
};

/**
 * 修改角色
 * @param data
 */
export const updateRole = (data: any) => {
  return request({
    url: "/system/role",
    method: "put",
    data: data
  });
};

/**
 * 角色数据权限
 */
export const dataScope = (data: any) => {
  return request({
    url: "/system/role/dataScopeRole",
    method: "put",
    data: data
  });
};

/**
 * 角色状态修改
 */
export const changeRoleStatus = (roleId: string | number, roleStatus: string) => {
  const data = {
    roleId,
    roleStatus
  };
  return request({
    url: "/system/role/changeStatus",
    method: "put",
    data: data
  });
};

/**
 * 删除角色
 */
export const delRole = (roleId: Array<string | number> | string | number) => {
  return request({
    url: "/system/role/" + roleId,
    method: "delete"
  });
};

/**
 * 查询角色已授权用户列表
 */
export const allocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
  return request({
    url: "/system/role/auth/allocatedList",
    method: "get",
    params: query
  });
};

/**
 * 查询角色未授权用户列表
 */
export const unallocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => {
  return request({
    url: "/system/role/auth/unAllocatedList",
    method: "get",
    params: query
  });
};

/**
 * 取消用户授权角色
 */
export const authUserCancel = (data: any) => {
  return request({
    url: "/system/role/auth/cancel",
    method: "put",
    data: data
  });
};

/**
 * 批量取消用户授权角色
 */
export const authUserCancelAll = (data: any) => {
  return request({
    url: "/system/role/auth/cancelBatch",
    method: "put",
    params: data
  });
};

/**
 * 授权用户选择
 */
export const authUserSelectAll = (data: any) => {
  return request({
    url: "/system/role/auth/selectBatch",
    method: "put",
    params: data
  });
};

// 根据角色ID查询部门树结构
export const deptTreeSelect = (roleId: string | number): AxiosPromise<RoleDeptTree> => {
  return request({
    url: "/system/role/deptTree/" + roleId,
    method: "get"
  });
};
